// axios基础的封装
import axios from 'axios'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/userStore'
import { useAdminStore } from "@/stores/adminStore";
import router from '@/router';

const httpInstance = axios.create({
  baseURL: 'http://localhost:8080',
  timeout: 5000
});

// 拦截器

// axios请求拦截器
httpInstance.interceptors.request.use(config => {

  let token;
  if (config.url.includes('admin')) {
    const adminStore = useAdminStore();
    token = adminStore.adminInfo.token;
  } else {
     const userStore = useUserStore();
     token = userStore.userInfo.token;
  }

  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }

  return config;
}, e => Promise.reject(e));

// axios响应式拦截器
httpInstance.interceptors.response.use(
  response => {
    const { data } = response;
    if (data && data.code === 0) {
      // 当code为0时，显示警告弹窗
      ElMessage.warning(data.msg || '服务器返回警告信息，请检查！');
      return Promise.resolve(response);
    }
    // 如果code不是0，则直接返回响应数据
    return response.data;
  },
  error => {
    // 错误处理
    if (error.response) {
      const { data, status } = error.response;
      // 处理不同 HTTP 错误码
      if (status === 401) {
        // 401 未授权，跳转到登录页
        ElMessage.error('登录信息已过期，请重新登录');
        router.push('/login');
      } else if (status === 403) {
        // 403 禁止访问
        ElMessage.error('您没有权限访问此资源');
      } else if (status === 500) {
        // 500 服务器错误
        ElMessage.error('服务器内部错误，请稍后重试');
      } else {
        // 其他 HTTP 错误
        ElMessage.error(data.message || '请求失败，请稍后重试！');
      }
    } else if (error.request) {
      // 请求已发出，但没有收到响应（网络问题）
      ElMessage.error('请求失败，网络问题或服务器未响应！');
    } else {
      // 其他错误（如请求配置错误）
      ElMessage.error(error.message || '请求配置错误，请检查！');
    }

    // 在开发环境中打印更多的错误信息以便调试
    if (process.env.NODE_ENV === 'development') {
      console.error(error);
    }

    // 返回被拒绝的 Promise，以便在调用处可以捕获到这个错误
    return Promise.reject(error);
  }
);

export default httpInstance